// Define global variables

// Imprese settore machine tools

Matrix W1(2,N1);				// Ricchezza netta
Matrix S1(2,N1);				// Sales
Matrix Deb1(2,N1);				// Fatturato
Matrix p1(2,N1);				// Prezzo
Matrix RD(2,N1);				// Spesa R&D
Matrix size1(2,N1);				// Size imprese
Matrix f1(2,N1);				// Quota di mercato imprese 

RowVector Q1(N1);				// Produzione
RowVector D1(N1);				// Domanda
RowVector tao(N1);				// Generazione macchinario
RowVector A1(N1);				// Produttività macchinario prodotto
RowVector Anew(N1);				// Produttività nuovo macchinario
RowVector A1inn(N1);			// Produttività macchinario innovazione
RowVector A1pinn(N1);			// Produttività processo innovazione 
RowVector A1imm(N1);			// Produttività macchinario innovazione
RowVector A1pimm(N1);			// Produttività processo innovazione
RowVector Pi1(N1);				// Profitti
RowVector Ld1(N1);				// Domanda di lavoro
RowVector Ld1rd(N1);				// Domanda lavoro R&D
RowVector ee1(N1);				// Vettore per entrata imprese
RowVector ind_ee1(N1);			// Vettore indici per entrata imprese
RowVector nclient(N1);			// Numero clienti
RowVector Debmax1(N1);			// Debito massimo
RowVector debres1(N1);			// Linea di credito residua
RowVector div1(N1);				// Dividendi
RowVector die(N1);
RowVector c1(N1);				// Costi produzione
RowVector A1p(N1);				// Produttività
RowVector RDin(N1);				// Spesa R&D innovazione
RowVector RDim(N1);				// Spesa R&D imitazione
RowVector Inn(N1);				// Vettore flag =1 se impresa innova
RowVector Imm(N1);				// Vettore flag =1 se impresa imita
RowVector Pat(N1);				// Vettore anni durata residua patent
RowVector flagA1(N1);			// Vettore di flag per file persistenza produttivita
RowVector A1f(N1);				// Vettore produttività imprese straniere
RowVector A1pf(N1);				// Vettore tecnologia imprse straniere
RowVector A1w(N1+N1f);			// Vettore tecnologia mondiale (frontiera esogena)
RowVector A1pw(N1+N1f);			// Vettore tecnologia mondiale (frontiera esogena)
RowVector Patw(N1+N1f);			// Vettore durata residua Patent con imprese mondiali


// Imprese settore manifatturiero

Matrix D2(5,N2);				// Domanda (N2 = numero imprese, 2 = memoria tempo)
Matrix De(3,N2);				// Domanda attesa
Matrix f2(3,N2);				// Market share
Matrix E2(2,N2);				// Competitivit‡
Matrix c2(2,N2);				// Costo unitario di produzione
Matrix Q2(2,N2);				// Produzione
Matrix N(2,N2);					// Scorte
Matrix Nm(2,N2);
Matrix W2(2,N2);				// Ricchezza netta
Matrix size2(2,N2);				// Size imprese
Matrix I(2,N2);					// Investimento totale impresa
Matrix EI(2,N2);				// Investimento espansione effettivo
Matrix SI(2,N2);				// Investimento sostituzione
Matrix S2(2,N2);				// Fatturato
Matrix Deb2(2,N2);				// Stock debito
Matrix p2(2,N2);				// Prezzo
Matrix mu2(2,N2);				// Vettore mark-up

ColumnVector Em2(2);			// Competitività media settore manifatturiero

RowVector EId(N2);				// Investimento espansione desiderato
RowVector SId(N2);				// Investimento sostituzione desiderato
RowVector A2(N2);				// Produttività media 
RowVector A2e(N2);				// Produttività effettiva
RowVector c2e(N2);				// Costo di produzione effettivo
RowVector Ld2(N2);				// Domanda di lavoro
RowVector l2(N2);				// Domanda non soddisfatta
RowVector n_mach(N2);			// Numero macchine impresa j
RowVector Qd(N2);				// Produzione desiderata
RowVector K(N2);				// Capitale
RowVector Kd(N2);				// Capitale desiderato
RowVector Ktrig(N2);			// Capitale trigger
RowVector Ktop(N2);				// Capitale max
RowVector Ke(N2);				// Capitale imprese entranti
//RowVector c2tot(N1);			// Costi totali produzione
RowVector Pi2(N2);				// Profitti
RowVector ueff(N2);				// Percentuale utilizzo capacità produttiva
//RowVector Z(N2);				// Vettore imbalances
RowVector ee2(N2);				// Vettore per entrata imprese
RowVector ind_ee2(N2);			// Vettore indici per entrata imprese
RowVector Q2temp(N2);
RowVector f_temp2(N2);
RowVector D_temp2(N2);
RowVector dN(N2);				// Variazione scorte
RowVector dNm(N2);
RowVector Debmax2(N2);			// Debito massimo
RowVector debres2(N2);			// Linea dicredito residua
RowVector fornit(N2);			// Indice fornitore macchine
RowVector Cmach(N2);			// Costo macchine
RowVector Ne(N2);				// Scorte attese
RowVector mol(N2);				// Margine operativo lordo
RowVector CF(N2);				// Cash Flow
RowVector dt(N2);				// Cash Flow
RowVector div2(N2);
RowVector flagA2(N2);			// Vettore flag per file produttività
RowVector Kexp(N2);				// Vettore flag per aspettative con entry a K variabile settore 2


// Variabili Generali

double g[T][N1][N2];			// matrice 3D frequenze macchine
double g_pb[T][N1][N2];			// matrice 3D per frequenze macchine pay_back
double C_pb[T][N1][N2];			// matrice 3D per costi macchine pay_back
double g_c[T][N1][N2];			// matrice 3D frequenze macchine per calcolo costo produzione
double gtemp[T][N1][N2];		// matrice 3D frequenze macchine temporanea
int age[T][N1][N2];				// matrice 3D età macchine
double Td[N1+1];				// vettore distanza tecnologica
double Tdw[N1+N1f+1];

Matrix A(T,N1);					// Matrice che contiene produttivit‡ macchine esistenti
Matrix C(T,N1);					// Matrice che contiene costi macchine esistenti 
Matrix Match(N2,N1);			// Matrice matching tra fornitori/client
Matrix mat2d(T,N1);

ColumnVector Am(2);				// Produttività media
ColumnVector cpi(2);			// Indice prezzi al consumo
ColumnVector ppi(2);			// Indice prezzi produzione 
ColumnVector U(2);				// Tasso di disoccupazione
ColumnVector w(3);				// Salario
ColumnVector G(2);				// Componente domanda esogena
ColumnVector ftot(3);			// Somma market share
ColumnVector diff_w(2);			// Diff. prima salario
ColumnVector diff_cpi(2);		// Diff. cpi
ColumnVector GDP(3);			// GDP
ColumnVector Divtot(2);			// Dividendi totali
ColumnVector A1front(2);		// Produttività macchinari frontiera esogena
ColumnVector A1pfront(2);		// Produttività processo frontiera esogena
ColumnVector A1top(2);			// Produttività macchinari frontiera endogena
ColumnVector A1ptop(2);			// Produttività processo frontiera endogena
ColumnVector wstar(2);			// optimal nominal wage

double Cons;					// Consumi
double Imon;					// Investimenti monetari
double EItot;					// Investimenti d'espansione totali reali
double SItot;					// Investimenti sostituzione totali reali
double Y;						// GDP
double LS;						// Offerta totale lavoro	
double LD;						// Domanda totale lavoro
double LD2;						// Domanda totale lavoro - R&D
double Pitot1;					// Profitti totali industria 1
double Pitot2;					// Profitti totali industria 2
double Pitot;					// Profitti totali economia
double Wtot1;					// Net worth totale industria 1
double Wtot2;					// Net worth totale industria 2
double Wtot;					// Net worth totale 
double maxtao;					// Massima generazione raggiunta
double scrapmax;				// Numero massimo macchine scrappate
double payback;					// Risultato payback
double cmax;					// Costo massimo per payback
double N1r;						// Numero imprese industria 1 in tipo real
double N2r;						// Numero imprese industria 2 in tipo real
double N2eff;					// Numero imprese effettivo
double epss;						// Random number from Normal distribution
double NW;						// Net Worth per razionamento
double LD1tot;					// Domanda lavoro aggregata industria machine tool
double LD2tot;					// Domanda di lavoro aggregata industria manifatturiera
double LD1rdtot;				// Domanda di lavoro aggregata R&D
double Ntot;					// Scorte totali
double l2m;						// Medie
double p2m;
double LSe;
double LD2e;
double d_cpi;
double d_Am;
double d_U;
double Qtot1;
double Qtot2;
double W1m;
double W2m;
double Creal;
double Ir;
double Ir2;
double dNtot;
double dw;
double avg_prod;
double avg_w;
double avg_y;
double avg_LS;
double Y0;
double GDP1;
double Am0;
double TFP;
double Debtot1;
double Debtot2;
double nmachprod;
double nmp_temp;
double Amax;
double prestmax;
double A1m;
double ftot1;
double Itot;
double D1tot;
double Qpast;
double gcont;
double npayback;
double mintao;
double Q2tot;
double D2tot;
double Cpast;
double l2tot;
double machtemp;
double Am1;
double Am2;
double Cres;
double Cresbis;
double Amm;
double p1m;
double c1m;
double S1m;
double Q1m;
double age0;
double Netot;
double Nt1tot;
double Nt2tot;
double D20;
double agetop;
double m2m;
double dNmtot;
double Cmon;
double GDPm;
double A_mi;
double A1_mi;
double A_sd;
double A2scr;
double A1scr;
double A_mi_nolog;
double avg_LS_MC;

double LD0; // Variabili in più rispetto a inv_GD
double avg_LD;
double Pi20;
double avg_Pi2;
double Pi10;
double avg_Pi1;
double GDPonPi;
double GDPonPi1;
double GDPonPi2;
double dNonGDP;
double IonK;
double dNtot2;
double rw;
double nclientmax;
double contQI;
double contalfasup;
double contQtot1;
double contINN;
double contIMM;
double contfront;
double contfront2;
double contA1entry;
double contA1front;
double contFE;
double contCC;
double contcpi1;
double contppi1;
double contIMMnaz;
double contIMMfor;
double Gtot;
double GonGDP;
double Tax;
double Deb;
double Def;
double DebonGDP;
double DefonGDP;
double c2tot;
double Mutot;
double rnd;
double parbertot;
double parbertot1;
double Inntot1;
double Inntot2;
double Immtot1;
double Immtot2;
double parbermax;
double parbermax1;
double tbermax;
double tbermax1;
double ninv;
double A1max;
double A1pmax;
double Km;
double f2exit;
double n2exit;
double f2max;
double Tdtot;
double tax1;
double p1prova;
double DebonGDPm1;
double DebonGDPm2;
double contSI;
double Umean;
double contMONOP;
double H1;
double H2; 
double DF1;
double DF2;
double HI;
double HIn;
double IxHI;
double IxHIn;
double N2lI;
double N2hI;
double N2lEI;
double N2hEI;
double contmach;
double umin;
double A1fmax;
double A1pfmax;
double A1fmin;
double A1pfmin;
double A1favg;
double A1pfavg;
double A1fstd;
double A1pfstd;
double A1ratio;
double A1pratio;
double Am1bis;
double A1avg;
double A1pavg;

float rnf;
float parber;					// Parametro Bernulli

char nomefile[32];
char nomefile0[32];
char nomefile1[32];
char nomefile2[32];
char nomefile3[32];
char nomefile4[32];
char nomefile5[32];
char nomefile6[32];
char nomefile7[32];

int i;							// Indici per cicli
int j;							
int t;
int ii;
int jj;
int iii;						
int jjj;							
int ttt;
int tt;
int n;
int num;						// numero per salvare file
int jmax;						// indici per massimi
int tmax;
int imax;
int ind_i;
int ind_tt;
int indforn;
int flag;						// flag
int rni;						// Random number
int t0;
int t00;
int nwm1;
int nwm2;
int cont;
int nsize;
int newbroch;					// Numero di nuovi clienti da contattare
int step;
int stepbis;
int nextmax1;
int nextmax2;
int next1;						// Numero uscite industria 1
int next2;						// Numero uscite industria 2
int imc;
int errFULLEMP;					// flag errore full employment

long seed;						// Seed per numeri casuali della normale
long *p_seed;					// Puntatore al seed

//Matrix Matric;
ofstream debug("debug.txt");







						



